package ejemplos.socket.sumador;

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.UnknownHostException;

/**
 * La clase Cliente se conecta a un servidor y permite enviarle mensajes. Luego
 * lee la respuesta del mismo. Para cerrar la conexion escribir System:salir
 * 
 * @author ger
 * 
 */
public class Cliente {
	// private final static int maximoASumar = 40;

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Socket cliente = null;
		try {
			System.out.println("Tratando de crear el socketCliente");
			cliente = new Socket("localhost", 5557);
			DataOutputStream salida = new DataOutputStream(cliente
					.getOutputStream());
			DataInputStream entrada = new DataInputStream(cliente
					.getInputStream());
			hablar(entrada, salida);

		} catch (UnknownHostException e1) {
			System.out
					.println("No pude comunicarse con el host. Cerrando conexiones.. ");
		} catch (IOException e1) {
			System.out.println("Error I/O. Cerrando conexiones..");
		} finally {
			try {
				if (cliente != null)
					cliente.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

	private static void hablar(DataInputStream entrada, DataOutputStream salida) {

		String linea;
		InputStreamReader consolaIn = new InputStreamReader(System.in);
		BufferedReader lectura = new BufferedReader(consolaIn);
		System.out.println("Enlazados. Puede comunicarse/n");
		while (true) {
			try {
				System.out.println("\nCliente:");
				linea = lectura.readLine();
				if ("System:salir".equals(linea)) {
					System.out.println("Cerrando la conexion");
					System.exit(0);
				} else
					salida.writeUTF(linea);
				linea = entrada.readUTF();
				System.out.println("Servidor: " + linea);
			} catch (IOException e) {
				e.printStackTrace();
				System.out.println("No se pudo leer la consola");
			}
		}
	}

}
